﻿namespace Digitalmes.WebApi.ViewModels;

/// <summary>
/// 路由。
/// </summary>
public sealed class RouteViewModel
{
    /// <summary>
    /// 路由唯一名称，一般设为组件名称。
    /// </summary>
    [Required]
    public string? Name { get; set; }

    /// <summary>
    /// 显示路径。
    /// </summary>
    [Required]
    public string? Path { get; set; }

    /// <summary>
    /// View 目录下的组件路径，不需要添加文件后缀名（如 '/dashboard/analysis/index'）
    /// </summary>
    /// <remarks>
    /// 当为目录时，设为 'LAYOUT'。
    /// </remarks>
    public string? Component { get; set; }
   
    /// <summary>
    /// 路由元数据
    /// </summary>
    public RouteMetaViewModel? Meta { get; set; }

    /// <summary>
    /// 子路由集合
    /// </summary>
    public List<RouteViewModel>? Children { get; set; }
}

/// <summary>
/// 路由元数据。
/// </summary>
public sealed class RouteMetaViewModel
{
    /// <summary>
    /// 路由 title，一般必填
    /// </summary>
    [Required]
    public string? Title { get; set; }

    /// <summary>
    /// 图标
    /// </summary>
    public string? Icon { get; set; }

    /// <summary>
    /// 用于配置内嵌页面的 iframe 地址，设置后会在当前页面内嵌对应的页面。
    /// </summary>
    public string? IframeSrc { get; set; }

    /// <summary>
    /// 用于配置外链跳转路径，会在新窗口打开。
    /// </summary>
    public string? Link { get; set; }

    /// <summary>
    /// 配置页面是否固定标签页，固定后页面不可关闭
    /// </summary>
    public bool AffixTab { get; set; }

    /// <summary>
    /// 是否开启KeepAlive缓存
    /// </summary>
    public bool? KeepAlive { get; set; }

    /// <summary>
    /// 是否隐藏菜单
    /// </summary>
    public bool? HideInMenu { get; set; }

    /// <summary>
    /// 是否当前路由的子级在菜单中不展现
    /// </summary>
    public bool? HideChildrenInMenu { get; set; }

    /// <summary>
    /// 是否当前路由在标签页不展现
    /// </summary>
    public bool? HideInTab { get; set; }

    /// <summary>
    /// 是否在新窗口打开
    /// </summary>
    public bool? OpenInNewWindow { get; set; }

    /// <summary>
    /// 用于配置页面的权限，只有拥有对应权限的用户才能访问页面，不配置则不需要权限。
    /// </summary>
    public string[]? Authority { get; set; }

    /// <summary>
    /// 用于配置页面的排序，用于路由到菜单排序。
    /// </summary>
    public int? Order { get; set; }
}
